package com.gjt.http;

import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.net.CacheRequest;

/**
 * Created with Intel IDEA.
 *
 * java的web缓存：java并不完成缓存，安装URL类使用系统级缓存：需要有 ResponseCache 的一个具体子类，CacheRequest 一个具体子类，
 *              CacheResponse 的一个具体子类： 缓存最初的响应时，数据和首部都要存储
 *          ResponseCache处理CacheRequest和CacheResponse，需要把它传递到静态方法ResponseCache.setDefault();
 *                      提供的抽象方法：
 *                      public abstract CacheResponse get(URI uri,String requestMethod, Map<String,List<String>> requestHeaders)
 *                      public abstract CacheRequest put (URI uri ,URLConnection connection)
 *          CacheRequest:包装了一个OutputStream
 *                       提供抽象方法：
 *                       public abstract OutputStream getBody();
 *                       public abstract void abort();
 *          CacheResponse:
 *                      提供的抽象方法：
 *                      public abstract Map<String,List<String>> getHeaders():返回首部
 *                      public abstract InputStream getBody(): 返回请求的数据
 *
 *
 *
 * @Auther: gjt
 * @Date: 2024/3/26 15:21
 */
public class SimpleCacheRequest extends CacheRequest {
    private ByteArrayOutputStream out = new ByteArrayOutputStream();

    @Override
    public OutputStream getBody() throws IOException {
        return out;
    }

    /**
     * 候选的策略，可以把结果存储在文件中，并使用一个FileOutputStream
     */
    @Override
    public void abort() {
        out.reset();
    }

    /**
     *  获取数据
     * @return
     */
    public byte[] getData(){
        if(out.size() == 0){
            return null;
        }else {
            return out.toByteArray();
        }
    }
}
